package com.example.demo.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.task.TaskExecutor;
import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;

/**
 * @description：线程池配置，以控制线程池，异步任务会额外开启一个线程，这样可以更精细的管理线程.
 * @author：lw
 * @create_time：2024/2/4
 **/

@Configuration
public class ThreadPoolConfig {
    @Bean(name = "taskExecutor")
    public TaskExecutor taskExecutor() {
        ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor();
        executor.setCorePoolSize(8);        // 设置线程池的基本大小，即核心线程数。
        executor.setMaxPoolSize(256);   // 设置线程池所能容纳的最大线程数。
        executor.setQueueCapacity(256); // 设置线程池所使用的缓冲队列的容量。
        executor.setKeepAliveSeconds(60000); // 设置线程的存活时间（单位为秒）。
        executor.setThreadNamePrefix("test-"); // 设置线程名称的前缀，这样可以方便地通过线程名识别出是哪个线程池中的线程。
        executor.initialize();// 初始化方法，它将基于上述配置构建并初始化线程池。通常在@Bean注解的方法中调用这个方法，以便Spring容器能够正确地管理线程池的生命周期。
        return executor;
    }
}
